﻿


//文件操作，首先初始化操作文件，给定文件名，路径，然后判断存在，或创建，最后进行操作

//给定文件名字，路径，通过System.IO.Path 类判断路径目录是否存在
/// <summary>
///System.IO.Path 是 C# 中用于处理和转换文件路径字符串的静态类，
///位于 System.IO 命名空间下。它提供了一系列方法，用于解析、组合、修改和验证路径，而不直接操作文件系统
/// </summary>
//通过System.IO.Directory 类创建目录或者文件
/// <summary>
/// System.IO.Directory 是 C# 中用于操作目录（文件夹）的静态类
/// 位于 System.IO 命名空间下。它提供了一系列静态方法，用于创建、删除、移动、查询和遍历目录，是文件系统操作的核心工具之一
/// </summary>
//通过System.IO.File或FileInfo处理文件操作
/// <summary>
/// System.IO.File 是 C# 中用于操作文件的静态类，
/// 位于 System.IO 命名空间下。它提供了一系列静态方法，用于创建、读取、写入、复制、移动和删除文件，是文件系统操作的核心工具之一。
/// 
/// System.IO.FileInfo 是 C# 中用于表示文件路径并提供文件操作功能的类，
/// 位于 System.IO 命名空间下。它是 FileSystemInfo 的派生类，提供了面向对象的方式来操作文件，与静态类 File 功能类似但使用方式不同。
/// 
/// File 类支持以下核心操作：
///文件读写：创建、读取和写入文件内容
///文件管理：复制、移动、删除和重命名文件
///文件信息：获取文件属性（如创建时间、大小）
///文件权限：检查和修改文件访问权限
/// FileInfo 类；
/// 面向对象：通过实例化对象操作文件，而非静态方法。
///缓存文件信息：创建对象时获取文件信息（如大小、时间）并缓存，减少重复查询。
///支持链式调用：部分方法返回 FileInfo 自身，便于链式操作
/// </summary>


//其次不同文件存储方式的操作方式都大差不差，以上3步基本通用，调用什么库来操作。
//就是存储方式如何选择的问题了






/*
文件操作是 C# 中常用的 IO 功能，主要通过以下类实现路径处理、目录管理和文件操作：

System.IO.Path：静态类，专注于路径字符串的解析、组合与验证（不直接操作文件系统）。
System.IO.Directory：静态类，用于目录（文件夹）的创建、删除、查询等操作。
System.IO.File：静态类，提供文件的创建、读写、复制、移动等静态方法。
System.IO.FileInfo：实例类，面向对象的文件操作方式，缓存文件信息以优化多次操作。





二、System.IO.Path 类（路径处理）
核心功能
处理路径字符串，不涉及实际文件系统操作。
跨平台兼容（自动适配 Windows/Linux/macOS 的路径分隔符）。

常用方法与作用
Path.Combine(string path1, string path2)：
安全组合多个路径片段，自动处理分隔符（如Path.Combine("C:\\dir", "file.txt")生成C:\dir\file.txt）。

Path.GetDirectoryName(string path)：
从文件路径中提取目录部分（如"C:\dir\file.txt"返回"C:\dir"）。

Path.GetFileName(string path)：
从路径中提取文件名（含扩展名，如"C:\dir\file.txt"返回"file.txt"）。

Path.GetFileNameWithoutExtension(string path)：
提取文件名（不含扩展名，如"file.txt"返回"file"）。

Path.GetExtension(string path)：
获取文件扩展名（含.，如"file.txt"返回".txt"）。

Path.GetFullPath(string path)：
将相对路径转换为绝对路径（基于当前工作目录）。

Path.GetInvalidFileNameChars() / Path.GetInvalidPathChars()：
返回系统中不允许出现在文件名 / 路径中的字符数组（用于验证路径合法性）。

Path.GetTempPath()：
获取系统临时目录路径（如 Windows 的"C:\Users\用户名\AppData\Local\Temp\"）。




三、System.IO.Directory 类（目录管理）
核心功能
操作目录（文件夹）的创建、删除、查询等，支持递归处理多级目录。

常用方法与作用
Directory.Exists(string path)：
判断指定路径的目录是否存在（返回bool）。

Directory.CreateDirectory(string path)：
递归创建目录（若父目录不存在则自动创建，如创建"C:\a\b\c"时，会自动创建a和b目录）。

Directory.Delete(string path, bool recursive)：
删除目录，recursive=true时递归删除子目录及文件（否则仅删除空目录）。

Directory.Move(string sourceDirName, string destDirName)：
移动或重命名目录（若目标目录存在则抛出异常）。

Directory.GetDirectories(string path)：
获取指定目录下的所有子目录路径（返回字符串数组）。

Directory.GetFiles(string path, string searchPattern)：
获取目录中符合搜索模式的文件路径（如Directory.GetFiles("C:\dir", "*.txt")返回所有 txt 文件）。




四、System.IO.File 类（文件操作 - 静态方法）
核心功能
提供静态方法，用于文件的创建、读写、复制等一次性操作。

常用方法与作用
File.Exists(string path)：
判断文件是否存在（返回bool）。

File.Create(string path)：
创建文件，返回FileStream对象（若文件已存在则覆盖）。

File.Delete(string path)：
删除指定文件（文件不存在时不报错）。

File.Copy(string sourceFileName, string destFileName, bool overwrite)：
复制文件，overwrite=true时覆盖目标文件。

File.Move(string sourceFileName, string destFileName)：
移动或重命名文件（若目标文件存在则抛出异常）。

File.ReadAllText(string path)：
读取文件所有文本内容（返回字符串，自动处理编码）。

File.WriteAllText(string path, string contents)：
将文本内容写入文件（覆盖原有内容）。

File.AppendAllText(string path, string contents)：
向文件末尾追加文本内容（文件不存在则创建）。

File.ReadAllBytes(string path) / File.WriteAllBytes(string path, byte[] bytes)：
以字节数组形式读写文件（适用于非文本文件，如图片、二进制数据）。



五、System.IO.FileInfo 类（文件操作 - 实例方法）
核心功能
面向对象的文件操作，通过实例化对象管理文件，缓存文件信息以优化多次操作。

常用属性与方法
属性：
Exists：文件是否存在（bool）。

FullName：文件完整路径（string）。

Length：文件大小（字节，long）。

CreationTime / LastWriteTime：文件创建时间 / 最后修改时间（DateTime）。

Directory：文件所在目录的DirectoryInfo对象。

方法：
Create()：创建文件，返回FileStream（与File.Create功能一致）。

Delete()：删除文件（与File.Delete功能一致）。

CopyTo(string destFileName, bool overwrite)：复制文件，返回目标文件的FileInfo对象（支持链式调用）。

MoveTo(string destFileName)：移动或重命名文件。

OpenRead() / OpenWrite()：打开文件流用于读取 / 写入（返回FileStream）。

OpenText()：打开文本读取流（返回StreamReader，适用于文本文件）。



六、使用场景与最佳实践
路径处理优先用Path类：
避免手动拼接路径（如硬编码\或/），使用Path.Combine确保跨平台兼容性。
目录操作核心流程：
操作文件前先验证目录是否存在，不存在则通过Directory.CreateDirectory创建（无需手动逐级判断父目录）。
File与FileInfo的选择：
单次操作（如临时读写）：用File类的静态方法（代码简洁）。
多次操作同一文件（如反复读写或查询属性）：用FileInfo（缓存信息，减少 IO 开销）。
资源释放：
操作文件流（FileStream、StreamReader等）时，使用using语句自动释放资源，避免文件锁定。
异常处理：
文件操作可能抛出IOException（文件被占用）、UnauthorizedAccessException（权限不足）等异常，需通过try-catch捕获处理。
七、总结
Path：处理路径字符串的 “工具人”，不碰实际文件系统。
Directory：管理目录的 “管理员”，负责创建、删除文件夹。
File：文件操作的 “快捷工具”，适合一次性简单操作。
FileInfo：文件操作的 “专用管家”，适合多次操作同一文件，效率更高。
*/





